/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myftp.core.view;

import java.awt.Container;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JComponent;
import javax.swing.JPanel;
import myftp.core.model.IModel;

/**
 *
 * @author CAVARLE Glenn, LUCAS Stéphane
 * classe abstraite étendue par toutes les vues
 * définition du comportement d'une vue
 */
public abstract class AbstractView extends JPanel {

    /**
     * model associé à la vue
     * @var model
     */
    private IModel model;
    /**
     * le conteneur de la vue (parent)
     * @var parentContainer
     */
    private Container parentContainer;

    /**
     * méthode à définir pour initialiser la vue
     * @return AbstractView
     */
    public abstract AbstractView init();

    /**
     * setter pour la vue
     * @param model
     */
    public void setModel(IModel model) {
        this.model = model;
    }

    /**
     * getter pour le model
     * @return
     */
    public IModel getModel() {
        return this.model;
    }

    /**
     * setter pour le conteneur
     * @param container
     */
    public void setParentContainer(Container container) {
        this.parentContainer = container;
    }

    /**
     * getter pour le conteneur
     * @return Container
     */
    public Container getParentContainer() {
        return this.parentContainer;
    }

    /**
     * Classe définissant le comportement d'un viewListener
     */
    public class ViewListener implements ComponentListener {

        /**
         * composant
         * @var component
         */
        private JComponent component;

        /**
         * constructeur
         * @param component
         */
        public ViewListener(JComponent component) {
            this.component = component;
        }

        /**
         * resize du composant selon la taille de son parent
         * @param e
         */
        public void componentResized(ComponentEvent e) {
            Integer width = this.component.getWidth();
            Integer height = this.component.getHeight();
            e.getComponent().setBounds(0, 0, width, height);
        }

        public void componentMoved(ComponentEvent e) {
        }

        public void componentShown(ComponentEvent e) {
        }

        public void componentHidden(ComponentEvent e) {
        }
    }
}
